package com.exam.annotation;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

@Inherited
@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Cache {
    /**
     * 返回前缀字符串。
     *
     * @return 前缀字符串，默认为空字符串。
     */
    String prefix() default "";

    /**
     * 后缀字符串，默认为空字符串。
     */
    String suffix() default "";

    /**
     * 返回缓存的存活时间（TTL），单位为秒。
     *
     * @return 缓存的存活时间，默认为300秒。
     */
    long ttl() default 300;

    /**
     * 每个ttl后加随机的过期时间, 防止缓存雪崩
     *
     * @return 随机的过期时间，默认为5秒
     */

    int randomTime() default 5;

    /**
     * 返回时间单位枚举，默认为 TimeUnit.SECONDS
     *
     * @return 时间单位枚举
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * 如果为true则执行目标方法后, 重设cache
     * 这个目标方法必须返回**需要缓存的数据**
     * 是否重设缓存，默认为false。
     */
    boolean resetCache() default false;
}
